package com.douma.第10天;

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

/**
 * 抖码算法，让算法学习变的简单有趣
 *
 * @作者 : 老汤
 */
public class 日志排序 {

    /*
    题目 2：日志排序
    题目描述：
    运维工程师采集到某产品线网运行一天产生的日志n条，现需根据日志时间先后顺序对日志进行排序，日志时间格式为H:M:S.N。
    H表示小时(0~23)
    M表示分钟(0~59)
    S表示秒(0~59)
    N表示毫秒(0~999)

    时间可能并没有补全，也就是说，01:01:01.001也可能表示为1:1:1.1。

    输入描述：
    第一行输入一个整数n表示日志条数，1<=n<=100000，接下来n行输入n个时间。

    输出描述：
    按时间升序排序之后的时间，如果有两个时间表示的时间相同，则保持输入顺序。

    示例：
    输入：
    2
    01:41:8.9
    1:1:09.211

    输出：
    1:1:09.211
    01:41:8.9

    输入：
    3
    23:41:08.023
    1:1:09.211
    08:01:22.0

    输出：
    1:1:09.211
    08:01:22.0
    23:41:08.023

    输入：
    2
    22:41:08.023
    22:41:08.23

    输出：
    22:41:08.023
    22:41:08.23
     */
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        sc.nextLine();

        String[] dateStrs = new String[n];
        for (int i = 0; i < n; i++) {
            dateStrs[i] = sc.nextLine();
        }

        Arrays.sort(dateStrs, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                // 按照时间升序排列
                return (int) (getMillisecond(o1) - getMillisecond(o2));
            }
        });

        for (String str : dateStrs) {
            System.out.println(str);
        }

        sc.close();
    }

    // 将字符串时间转化为对应的毫秒数
    private static long getMillisecond(String time) {
        int dotIndex = time.indexOf(".");
        long ms = Integer.valueOf(time.substring(dotIndex + 1));
        String[] h_m_s = time.substring(0, dotIndex).split(":");
        ms += Integer.valueOf(h_m_s[2]) * 1000;
        ms += Integer.valueOf(h_m_s[1]) * 60 * 1000;
        ms += Integer.valueOf(h_m_s[0]) * 60 * 60 * 1000;
        return ms;
    }
}
